{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**摘要**  \n",
    "\n",
    "1. 概率图模型\n",
    "2. 隐马尔可夫模型\n",
    "3. 隐马尔可夫问题的解法概述  \n",
    "\n",
    "\n",
    "注：这里学习的算法内容已经不完全属于《机器学习实战》中讲述的知识了，\n",
    "\n",
    "概率图模型   \n",
    "\n",
    "概率图模型，顾名思义就是用图的形式表达变量相关关系的概率模型。它以图为表现形式，最常见的就是用一个节点表示一个或一组随机变量，用节点之间的边表示变量间的关系。  \n",
    "\n",
    "概率图模型主要有两种形式：  \n",
    "\n",
    "1. 有向图模型，如下图所示：  \n",
    "\n",
    "<img src=\"https://pic2.zhimg.com/80/v2-480bf79f7f257dfcc836d9e4d4ff1316_hd.jpg\",width=400,height=400>\n",
    "\n",
    "节点与节点之间是用有向的边联系起来的，它代表了一种因果关系， $P_1$表示从$A$变到$B$的概率为$P_1$。   \n",
    "\n",
    "\n",
    "2. 无向图模型，如下图所示：  \n",
    "\n",
    "<img src=\"https://pic2.zhimg.com/80/v2-e81defb8ef8fe973a8b9057150525ec7_hd.jpg\",width=400,height=400>\n",
    "\n",
    "\n",
    "节点与节点之间是用无向的边联系起来的，它代表节点与节点之间的相关关系，无因果关系或者不知道因果关系。\n",
    "\n",
    "\n",
    "## 隐马尔科夫模型  \n",
    "\n",
    "隐马尔可夫模型（Hidden Markov Model，HMM），是一种有向图模型。\n",
    "\n",
    "什么是马尔可夫模型呢？给大家举个例子：\n",
    "\n",
    "现在有4个袋子，每个袋子里面有10个球，袋子里面的球情况如下：\n",
    "\n",
    "<img src=\"https://pic2.zhimg.com/80/v2-677c999bfbf8491b1e16636647d35a8d_hd.jpg\",width=400,height=400>\n",
    "\n",
    "\n",
    "这时候我们从4个袋子中随机选一个袋子，从这个袋子中随机抽出一个球，记录其颜色，然后放回。然后从当前袋子随机转移到另外一个袋子，转移的规则是这样：如果当前袋子编号是1，那么下一个袋子一定是袋子2；如果当前的袋子是2或3，那么分别以0.4和0.6的概率转移到左边或右边的袋子；如果当前袋子是4，那么各以0.5的概率停留在袋子4或转移到袋子3。我们确定转移的袋子后，再从这个袋子中随机抽出一个球，记录其颜色，放回。上述过程重复5次，得到球的观测序列：\n",
    "\n",
    "O=｛红，红，蓝，蓝，红｝\n",
    "\n",
    "我们只能观测到球颜色的序列，但是具体是从哪个袋子中取出的我们并不知道。\n",
    "\n",
    "所以我们就可以有如下定义，\n",
    "\n",
    "**状态序列**：就是例子中所说的每次从哪个袋子中取出的球，状态序列一般情况下我们是不知道的。\n",
    "\n",
    "**观测序列**：我们实际可以观测到的东西，就是例子中每次取出的球的颜色，观测序列一般情况下我们是知道的。\n",
    "\n",
    "定义完了两个序列，下面我们就要开始定义隐马尔可夫模型中最重要的三个因素：\n",
    "\n",
    "**1.状态转移概率矩阵A**\n",
    "\n",
    "$A=[a_{ij}]_{N\\times{N}}$\n",
    "\n",
    "$a_{ij}$代表这一时刻状态为$i$，下一时刻状态转移到$j$的概率，在上面的例子中状态转移概率矩阵为：  \n",
    "\n",
    "$\n",
    "A=\n",
    "\\left( \\begin{array}{ccc}\n",
    "0 & 1 & 0 & 0 \\\\\n",
    "0.4 & 0 & 0.6 & 0 \\\\\n",
    "0 & 0.4 & 0 & 0.6\\\\\n",
    "0 & 0 & 0.5 & 0.5 \\end{array} \\right)\n",
    "$\n",
    "\n",
    "**2.观测概率矩阵B**  \n",
    "\n",
    "观测概率矩阵表示当处于某一状态时，生成具体观测的概率，在上面的例子中观测矩阵为：\n",
    "$\n",
    "B=\n",
    "\\left( \\begin{array}{ccc}\n",
    "0.5 & 0.5 \\\\\n",
    "0.3 & 0.7 \\\\\n",
    "0.6 & 0.4 \\\\\n",
    "0.8 & 0.2 \\end{array} \\right)\n",
    "$\n",
    "\n",
    "\n",
    "**3.初始状态概率向量 $\\pi$ **\n",
    "\n",
    "初始状态转移概率向量表示最开始处于某一状态的概率，在例子中，由于一开始是随机选取了一个袋子，所以初始状态概率向量为：\n",
    "\n",
    "$\\pi=(0.25,0.25,0.25,0.25)^T $\n",
    "\n",
    "隐马尔可夫模型 $\\lambda$ 就是由上述三个要素决定，记作：\n",
    "\n",
    "$\\lambda=(A,B,\\pi) $\n",
    "\n",
    "状态转移矩阵A和初始状态概率向量 $\\pi$ 决定了隐藏的马尔可夫链，生成了不可观测的状态序列；观测概率矩阵B确定了如何从状态生成观测，其与状态序列一起决定了如何产生观测序列。\n",
    "\n",
    "有了上面的介绍，下面我们来规定一些符号：\n",
    "\n",
    "设$Q$为所有可能的状态的集合，$V$是所有可能的观测的集合：\n",
    "\n",
    "$\n",
    "Q=\\left\\{ q_1,q_2,...,q_N \\right\\}, V=\\left\\{ v_1,v_2,...,v_M \\right\\} $\n",
    "\n",
    "其中$N$是可能的状态数，$M$是可能的观测数。在例子中，$Q$和$V$分别为：\n",
    "\n",
    "$Q$={袋子1，袋子2，袋子3，袋子4，袋子5}；$V$=｛红色，蓝色｝\n",
    "\n",
    "定义 $i$ 为长度为T的状态序列，O为对应的观测序列：\n",
    "$\n",
    "I=\\left\\{ i_1,i_2,...,i_T \\right\\},O=\\left\\{ o_1,o_2,...,o_T\\right\\} \n",
    "$\n",
    "\n",
    "\n",
    "在例子中，$O$对应为：\n",
    "\n",
    "$\n",
    "O$=｛红，红，蓝，蓝，红｝\n",
    "\n",
    "定义完了上面的符号，我们引出隐马尔可夫模型的两个基本假设：\n",
    "\n",
    "1. 齐次马尔可夫性假设，即假设隐藏的马尔可夫链在任意时刻t的状态只依赖于前一时刻的状态，与其他时刻的状态和观测无关。\n",
    "\n",
    "2. 观测独立性假设，即假设任意时刻的观测只依赖于该时刻的状态，与其他状态及观测无关。\n",
    "\n",
    "以上就是隐马尔可夫模型的原理内容，那这个模型主要是为了解决什么问题呢？\n",
    "\n",
    "\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
